[Talend]コンポーネントの定義をプロパティファイルで切り出しておく
やっておきたいこと
Talendでジョブ定義するにあたり、いろんなコンポーネントを配置することになります。 ローカルPCで開発している時には特に問題ないですが、作成後にジョブを実行形式で書き出して運用環境へ 配置したい場合は少し工夫が必要です。 例えばtMysqlOutPutのDB接続情報を[組み込み]のままジョブの実行形式を書き出してしまうと 自動生成されるjavaソース内に情報が埋め込まれたままになります。
String properties_tMysqlOutput_1 = "noDatetimeStringSync=true"; if (!properties_tMysqlOutput_1 .contains("rewriteBatchedStatements")) { properties_tMysqlOutput_1 += "&rewriteBatchedStatements=true"; } url_tMysqlOutput_1 = "jdbc:mysql://" + "127.0.0.1" + ":" + "3306" + "/" + "test" + "?" + properties_tMysqlOutput_1;
それを回避するためにプロパティファイルを外部に書き出しておくと便利です。 上のソースと同じ部分を抜き出しましたが、下記は自動生成されるjavaソース内が変数として定義されてます。
String properties_tMysqlOutput_1 = context.MySQLCon_AdditionalParams; if (!properties_tMysqlOutput_1 .contains("rewriteBatchedStatements")) { properties_tMysqlOutput_1 += "&rewriteBatchedStatements=true"; } url_tMysqlOutput_1 = "jdbc:mysql://" + context.MySQLCon_Server + ":" + context.MySQLCon_Port + "/" + context.MySQLCon_Database + "?" + properties_tMysqlOutput_1;
定義を外部ファイルへ書き出す為の手順
tMysqlOutputをサンプルにやってみます。 何も意識せずにコンポーネントを配置するとプロパティタイプが【組み込み】になりますので一通り設定情報を 入力後に保存アイコンをクリックしてリポジトリに登録します。
クリックすると下記画面が出てきますので、任意の名前を付けて【Next】をクリックします。
この画面で設定が正しいかを確認するために【チェック】をクリックして接続ができるかを最終確認します。
次に【コンテキストとしてエクスポート】をクリックして下記画面を表示させて【Next】をクリック。
下記画面が表示されますので、必要項目を任意に入力して、【Next】をクリックします。
下記画面が表示されますので、追加で定義したいコンテキストがある場合は必要に応じて左下の+ボタンを クリックして定義を追加します。
あとは【Finish】ボタンをクリックすると下記画面のように設定値が自動で文字列で置き換えられますので、この画面でも【Finish】をクリックします。
すると下記確認画面が表示されますので、【Yes】をクリックします。
確認画面で【Yes】をクリックすると対象のコンポーネントの項目がコンテキスト文字列に置き換えられます。
ジョブをエクスポート
ジョブ定義が完了したら自律実行ジョブとして書き出してみます。 正しくエクスポートが完了するとCMBlog_4_0.1.zipのようにファイルが出来上がります。 それを展開すると下記のようにcontextsフォルダ配下にファイルが書き出されます。 Default.propertiesの中身は以下のような感じになっています。
#this is context properties #Wed Jul 29 16:34:08 KST 2015 #Context variables from repository context:SQLServerCon SQLServerCon_Login=sa SQLServerCon_AdditionalParams=noDatetimeStringSync\=true SQLServerCon_Password=15ae165a729fc7d0f1f7aba1746784fa SQLServerCon_Server=127.0.0.1 SQLServerCon_Schema= SQLServerCon_Port=1433 SQLServerCon_Database=sample #Context variables from repository context:MySQLCon MySQLCon_Database=test MySQLCon_Password=af8935f05ad2a205 MySQLCon_Server=127.0.0.1 MySQLCon_Port=3306 MySQLCon_Login=root MySQLCon_AdditionalParams=noDatetimeStringSync\=true
プロダクション環境ではMySQLのサーバがジョブ実行のマシンとは別の場合などはここでMySQLCon_Serverの部分のIPアドレスを 該当のIPにテキストエディタなどで直接書き換えて保存すれば対応可能になります。